/*
 * 依照一个存着新进货物的二维数组，更新存着现有库存(在 arr1 中)的二维数组.
 * 如果货物已存在则更新数量
 * 如果没有对应货物则把其加入到数组中，更新最新的数量. 返回当前的库存数组，且按货物名称的字母顺序排列.
*/

//思路：（1）对两个数组构建对象。然后用hasOwnProperty判断有，则累加，没有则定义这个属性并给他赋值。
//     （2）获取对象的属性名并排序：Object.keys(obj).sort(),返回的是一个数组。再重新定义这个数组并输出。
function updateInventory(arr1, arr2) {
    var oCur={};
    var oNew={};
    function arrToObj(arr,obj){
        for(var i=0;i<arr.length;i++){
            obj[arr[i][1]]=arr[i][0];
        }
    }//构造库存对象。
    arrToObj(arr1,oCur);
    arrToObj(arr2,oNew);

    //添加货物及属性
    for(i in oNew){
        console.log(oCur.hasOwnProperty(i))
        if(oCur.hasOwnProperty(i)){
            oCur[i]+=oNew[i];
        }else{
            oCur[i]=oNew[i];
        }
    }

    //属性名排序
    function objKeySort(obj) {//排序的函数
        var newkey = Object.keys(obj).sort();
        //newkey是一个排序后的属性名数组
        var newObj = {};
        for (var i = 0; i < newkey.length; i++) {
            newObj[newkey[i]] = obj[newkey[i]];
        }
        return newObj;//返回排好序的新对象
    }
    oCur=objKeySort(oCur);

    //反向编译这个对象，然后返回成最初的数组。
    var newArr=[];
    for(i in oCur){
        newArr.push([oCur[i],i]);
    }
    console.log(newArr);
    return newArr;
}

// 仓库库存示例
var curInv = [
    [21, "Bowling Ball"],
    [2, "Dirty Sock"],
    [1, "Hair Pin"],
    [5, "Microphone"]
];

var newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

updateInventory(curInv, newInv);